package com.gimi.cloud.jimi.dao.redis;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.gimi.cloud.jimi.common.utils.lianlian.JsonValidator;

import java.util.List;
import java.util.concurrent.TimeUnit;

/**
 * Created by luck on 2017/09/28.
 */
public interface IRedisService {

    /**
     * 设置键值对
     *
     * @param key
     * @param value
     * @return
     */
    public boolean set(String key, String value);

    /**
     * 设置键值对,且有过期时间
     * @param key
     * @param value
     * @param expireTime
     * @param timeUnit
     * @return
     */
    public boolean set(final String key,final String value,Long expireTime,TimeUnit timeUnit);

    /**
     * 根据单个键获取值
     *
     * @param key
     * @return
     */
    public String get(String key);

    /**
     * 删除指定键
     *
     * @param key
     * @return
     */
    public Long del(String key);

    public boolean expire(String key, long expire);

    public <T> boolean setList(String key, List<T> list);

    public <T> List<T> getList(String key, Class<T> clz);

    public long lpush(String key, Object obj);

    public long rpush(String key, Object obj);

    public String lpop(String key);

    public void lock(String key, long timeout);

    public void unlock(String key);

    /**
     * 返回为JSONObject对象
     * @param key
     * @return
     */
    public JSONObject getJSONObjectConfigByKey(String key);

    /**
     * 返回为json数组
     * @param key
     * @return
     */
    public JSONArray getJSONArrayConfigByKey(String key);

    /**
     * 设置一个对象到redis中，不会过期<br/>注意：内部采用：FastJSON.toJSONString 进行转化
     * @param redisKey 待设置的rediskey
     * @param obj 待设置到redis的对象
     */
    void setObject(String redisKey, Object obj);
}
